package util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

import domain.User;

//缓存机制
//程序启动的时候将User.txt文件中的所有信息一次性读出来
//之后做查询直接读缓存中的数据  提高性能
//增删改查，查询和增加相对容易，删除和修改需要删除所有数据重新写入
public class UserFileReader {
	//创建一个集合--->充当一个缓存
	private static HashMap<String,User> userBox = new HashMap<>();//静态的设计,保证集合是唯一的
	private static File file = new File("src\\dbfile\\User.txt");
	
	public static User getUser(String account){
		return userBox.get(account);
	}
	public static void addUser(User user) {
		userBox.put(user.getAccount(),user);
		UserFileReader.commit(userBox);
	}
	private static void commit(HashMap<String,User> userBox) {
		FileWriter fileWriter = null;
		BufferedWriter bufferedWriter = null;
		try {
			fileWriter = new FileWriter(file);
			bufferedWriter = new BufferedWriter(fileWriter);
			Iterator<String> names = userBox.keySet().iterator();
			//迭代器遍历哈希表
			while(names.hasNext()) {
				String name = names.next();
				User user = userBox.get(name);
				StringBuilder builder = new StringBuilder(user.getAccount());
				builder.append("-");
				builder.append(user.getPassword());
				bufferedWriter.write(builder.toString());;
				bufferedWriter.newLine();
				bufferedWriter.flush();
			}
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}finally {
			try {
				if(fileWriter!=null) {
					fileWriter.close();
				}
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			try {
				if(bufferedWriter!=null) {
					bufferedWriter.close();
				}
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
	}
	//在当前类加载的时候先执行
	static{//静态块，保证执行,因为普通的块是在构造方法之前执行的，如果没有执行构造方法，那普通块就没法执行
		BufferedReader reader = null;
		try {
			reader = new BufferedReader(new FileReader("src//dbfile//User.txt"));
			String user = reader.readLine();
			while(user!=null) {
				String[] values = user.split("-");
				userBox.put(values[0], new User(values[0],values[1]));//静态块内不能使用this关键字
				user = reader.readLine();
			}
		} catch (Exception e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} finally {
			try {
				if(reader!=null) {
					reader.close();
				}
			} catch (IOException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
		}
		
	}
}
